﻿using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using AutoplanetaTaskManager.Daos.EntityFramework;
using AutoplanetaTaskManager.Models;
using AutoplanetaTaskManager.Security;
using AutoplanetaTaskManager.Utilities;
using AutoplanetaTaskManager.Views.Components;

namespace AutoplanetaTaskManager.Views
{
    public partial class AddTaskForm : Form
    {
        private PostItemComponent _parentPostItemComponent;
        private int _postId;
        private DateTime _dateTime;

        public AddTaskForm(PostItemComponent postItemComponent, int postId, DateTime dateTime)
        {
            InitializeComponent();

            _parentPostItemComponent = postItemComponent;
            _postId = postId;
            _dateTime = dateTime;
        }

        private void AddTaskForm_Load(object sender, EventArgs e)
        {
            postNameTextBox.Text = new PostDao().Get(_postId).Name;
            clientNameTextBox.Text = string.Empty;
            dateTextBox.Text = string.Format("{0:dd.MM.yyyy}", _dateTime);
            timeMaskedTextBox.Text = string.Format("{0:HH:mm}", _dateTime);
            descriptionTextBox.Text = string.Empty;
            countHoursComboBox.DataSource = Config.GetCountHoursList();
        }

        private void cancelButton_Click(object sender, EventArgs e)
        {
            Dispose();
        }

        private void addButton_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(clientNameTextBox.Text))
            {
                MessageBox.Show(
                        "Нельзя изменить запись. Вы должны заполнить поле \"Клиент\".",
                        "Ошибка изменения записи \"Задание\"!");
            }
            else if (!new Regex(@"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[03][0]$").IsMatch(timeMaskedTextBox.Text))
            {
                MessageBox.Show(
                        "Нельзя изменить запись. Поле \"Дата\\время\" заполнено не верно.",
                        "Ошибка изменения записи \"Задание\"!");
            }
            else
            {
                Task task =
                    new Task
                        {
                            PostId = _postId,
                            PublisherId = SecurityManager.Get().User.Id,
                            ClientName = clientNameTextBox.Text,
                            TaskDateTime = _dateTime,
                            CountHours = (double) countHoursComboBox.SelectedValue,
                            Description = descriptionTextBox.Text,
                            Finished = false
                        };
                TaskDao taskDao = new TaskDao();
                if (taskDao.CheckAbilityAdding(task))
                {
                    taskDao.Add(task);
                    _parentPostItemComponent.UpdateContent();
                    Dispose();
                }
                else
                    MessageBox.Show(
                        "Нельзя добавить запись. Возможно задание выходит за пределы допустимых временных рамок.",
                        "Ошибка добавления записи \"Задание\"!");
            }
        }
    }
}
